package rkdwogus7.basic;

import java.util.ArrayList;
import java.util.Iterator;

import rkdwogus7.model.SungJukVO;

public class J22_Collection {
	
	public static void main(String[] args) {
		// 1. Create
		// 컬렉션 프레임워크 다루기
		// ArrayList - 가변 크기를 지원하는 배열
		ArrayList sjdata = new ArrayList();
		// JDK1.5 이전 방식으로 코드 작성. 그 후에는 책의 방식대로(383p)
		
		// ArrayList에 데이터 추가( add(내용) )
		sjdata.add(123);
		sjdata.add('가');
		sjdata.add(987.65);
		sjdata.add("xyz");
		
		// 특정 위치에 데이터 추가 ( add(위치, 내용) )
		sjdata.add(2, new SungJukVO());
		// 갖은 내용이 다 들어가. 배열을 만들어서 넣어 보면 당연히 오류가 생기겠지?
		// sjdata.add(10, new SungJukVO());  // 오류!
		// sjdata에는 총 5개의 데이터가 저장 중
		// 따라서, 10번째 위치에 데이터 추가는 불가
		
		// 2. Retrieve
		// ArrayList상의 데이터 알아내기 ( get(위치) )
		System.out.println( sjdata.get(0) );
		System.out.println( sjdata.get(2) );
		// SungJukVO(부모클래스)의 toString method를 없애면
		// 해당 객체의 주소값만 나와. println이라는 method는 
		// 안의 내용이 무엇이든 해당 객체의 toString method를 호출.
		// System.out.println( sjdata.get(10) );	// 오류!
		
		// ArrayList에 저장된 데이터 제거 ( size() )
		System.out.println( sjdata.size() );
		
		// 3. Delete
		// ArrayList에 저장된 데이터 갯수 알아내기 ( remove(위치) )
		System.out.println( sjdata.get(3) );
		sjdata.remove(3);
		System.out.println( sjdata.get(3) );
		// 배열이었다면 비었겠지? 그런데, 동적 배열이니까 앞에 채워 준거야.
		
		// 4. Update
		// ArrayList에 저장된 데이터 수정 ( set(위치, 값) )
		sjdata.set(3, "abc");
		System.out.println( sjdata.get(3) );
		
		// 2-1 Retrieve
		// ArrayList의 데이터 찾기 ( contains(값) )
		System.out.println( sjdata.contains(123) );
		System.out.println( sjdata.contains('가') );
		System.out.println( sjdata.contains("xyz") );
		
		// 2-2 Retrieve
		// ArrayList의 데이터 찾기 ( indexOf(값) )
		System.out.println( sjdata.indexOf(123) );
		System.out.println( sjdata.indexOf('가') );
		System.out.println( sjdata.indexOf("abc") );
		System.out.println( sjdata.indexOf("xyz") );
		// contains랑 indexOf를 잘 써서 데이터 위치랑 존재 여부 잘 사용해 봐.
		// 이 두 개를 적절하게 이용하면 데이터 조회가 쉬워
		
		// 3-1 Delete
		// ArrayList의 데이터 모두 제거 ( clear() )
		sjdata.clear();
		
		// 2-3 Retrieve
		// ArrayList의 데이터 존재 여부 ( isEmpty(값) )
		System.out.println( sjdata.isEmpty() );
		// 데이터를 싹 다 지웠으니 true로 return
		
	/*-----------------------------------------------*/
		// data 출력 시 일일이
		// System.out.println( sjdata.indexOf(123) );
		// System.out.println( sjdata.indexOf('가') );
		// System.out.println( sjdata.indexOf("abc") );
		// System.out.println( sjdata.indexOf("xyz") );
		// 이러긴 어렵지.
		
		// ArrayList상의 모든 데이터 출력 (1)
		sjdata.add("나비");
		sjdata.add("벌레");
		sjdata.add("강아지");
		sjdata.add("닭");
		sjdata.add("소");
		
		
		for (int i = 0; i < sjdata.size(); ++i) {
			System.out.print( sjdata.get(i) );
		}
		// 이럴 때는 ArrayList의 size를 알아야 가능하지. 그래서 조금 더 쉽게 처리해 줄거야
		System.out.println( "\n" );
		
		// ArrayList상의 모든 데이터 출력 (2)
		// Iterator 인터페이스를 이용하면 편리하게 collection의 요소들을 처리할 수 있음
		Iterator iter = sjdata.iterator();	// 선언
		while (iter.hasNext()) {
			System.out.print( iter.next() );
		}
		
		
		
	}

	
	
}










